package cn.itcast.mapreduce.covid.bean;

import org.apache.hadoop.io.WritableComparable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * 自定义对象作为数据类型在MapReduce中传递 别忘了实现Hadoop的序列化机制
 */
public class CovidCountBean implements WritableComparable<CovidCountBean> {

    private long cases;//确诊病例数
    private long deaths;//死亡病例数

    public CovidCountBean() {
    }

    public CovidCountBean(long cases, long deaths) {
        this.cases = cases;
        this.deaths = deaths;
    }

    //自己封装对象的set方法 用于对象属性赋值
    public void set(long cases, long deaths) {
        this.cases = cases;
        this.deaths = deaths;
    }

    public long getCases() {
        return cases;
    }

    public void setCases(long cases) {
        this.cases = cases;
    }

    public long getDeaths() {
        return deaths;
    }

    public void setDeaths(long deaths) {
        this.deaths = deaths;
    }

    @Override
    public String toString() {
        return cases + "\t" + deaths;
    }

    /**
     * 序列化方法 可以控制将哪些字段序列化出去
     */
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeLong(cases);
        dataOutput.writeLong(deaths);
    }

    /**
     * 反序列化方法 todo 注意反序列化的顺序和序列化一致
     */
    @Override
    public void readFields(DataInput dataInput) throws IOException {
        this.cases = dataInput.readLong();
        this.deaths = dataInput.readLong();
    }

    /**
     * 自定义对象的排序方法
     * 返回结果 0 相等  负数 小于  正数 大于
     * 倒序精髓： 如果大于 强制返回负数，如果小于 强制返回正数
     */
    @Override
    public int compareTo(CovidCountBean o) {
        return this.cases - o.cases > 0 ? -1 : (this.cases - o.getCases() < 0 ? 1 : 0);
    }

}
